package ScalaStudy.chapter05

object Test04_FunctionSimplify {
  def main(args: Array[String]): Unit = {


    /////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////   函数简化   /////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////


//    （1）	return 可以省略，Scala 会使用函数体的最后一行代码作为返回值 *******************************************
println("(1)")

    def f1(name: String): String = {
      name                                                           //return可以省略
    }
    println(f1("wq1"))

//    （2）	如果函数体只有一行代码，可以省略花括号 ***************************************************************
println("(2)")

    def f2(name: String) : String = name                             //省略函数体的{}
    println(f2("wq2"))

//    （3）	返回值类型如果能够推断出来，那么可以省略（:和返回值类型一起省略）******************************************
println("(3)")

    def f3(name: String) = name                                     //省略函数返回值的类型,如果有 return，则不能省略返回值类型
    println(f3("wq3"))

//    （4）	如果有 return，则不能省略返回值类型，必须指定 ********************************************************
//    （5）	如果函数明确声明unit，那么即使函数体中使用 return 关键字也不起作用***************************************

//    （6）	Scala 如果期望是无返回值类型，可以省略等号***********************************************************
println("(6)")

    def f6(name: String) {                                          //无返回值时可以省略=号
      println(name)
    }
    f6("wq6")

//    （7）	如果函数无参，但是声明了参数列表，那么调用时，小括号，可加可不加********************************************
println("(7)")

    def f7() {
      println("wq7")
    }
    f7                                                                //无参数时，调用可以省略()

//    （8）	如果函数没有参数列表，那么小括号可以省略，调用时小括号必须省略
println("(8)")

    def f8{                                                           //无参数时，函数定义可以省略()
      println("wq8")
    }
    f8                                                                //同时这里也必须省略

//    （9）	如果不关心名称，只关心逻辑处理，那么函数名（def）可以省略
println("(9)")

    def f9(name: String): Unit = {
      println(name)
    }

    (name: String) => { println(name) }                                //*****匿名函数***** lambda表达式
                                                                       // (参数名称: 参数类型) => {函数体}
  }
}
